package org.qxj.music.remote;

import cma.music.client.DataQueryClient;
import org.qxj.music.util.FormatUtil;
import org.springframework.stereotype.Component;

import java.util.HashMap;

/**
 * @author 那日苏
 * @description TODO
 * @date 2023-10-24 12:55
 */
@Component
public class RemoteClient {

    public void execute(long timeRangeStart, long timeRangeEnd) {

        /* 1. 定义client对象 */
        DataQueryClient client = new DataQueryClient() ;
        /* 2. 调用方法的参数定义，并赋值 */
        /* 2.1 用户名&密码 */
        String userId = "BFWT_XXBZZX";
        String pwd = "Xxbzzx!@#456";
        /* 2.2 接口ID */
        String interfaceId = "statSurfEleByTime";
        /* 2.3 接口参数，多个参数间无顺序 */
        HashMap<String, String> params = new HashMap<String, String>();
        // 必选参数
        params.put("elements", "PRE,Station_Id_C,Station_Type,PRE_Sensor_Heigh,Datetime,UPDATE_TIME,IYMDHM,Admin_Code_CHN,Alti,Mon,Lat,REP_CORR_ID,V08010,RYMDHM,Min,Day,Lon,Q_PRE,Hour,V02175,Year"); //统计分组：站号，站名

//        params.put("timeRange", "(20190601000000,20190601060000]"); // 时间范围，前开后闭
        params.put("timeRange", "(" + timeRangeStart + "," + timeRangeEnd + "]"); // 时间范围，前开后闭
        // 可选参数
        params.put("orderby", "SUM_PRE_1h:desc"); // 排序：按照累计降水从大到小
        // params.put("statEleValueRanges", "SUM_PRE_1h:(50,)");
        // //统计结果过滤：累计降水值大于50mm的记录
        // params.put("limitCnt", "10") ; //返回最多记录数：10
        // params.put("staLevels", "011,012,013") ; //台站级别：国家站（基准站、基本站、一般站）

        /* 2.4 返回文件的格式 */
        String dataFormat = "json" ;
        /* 2.5 返回字符串 */
        StringBuffer retStr = new StringBuffer() ;

        /* 3. 调用接口 */
        try {
            //初始化接口服务连接资源
            client.initResources() ;
            //调用接口
            int rst = client.callAPI_to_serializedStr(userId, pwd, interfaceId, params, dataFormat, retStr) ;
            //输出结果
            System.out.println("rst: " + rst);
            if(rst == 0) { //正常返回
                FormatUtil formatUtil = new FormatUtil() ;
                formatUtil.outputRstJson( retStr.toString() ) ;
            } else { //异常返回
                System.out.println( "[error] StaElemStatAPI_CLIB_callAPI_to_serializedStr_JSON." ) ;
                System.out.printf( "\treturn code: %d. \n", rst ) ;
            }
        } catch (Exception e) {
            //异常输出
            e.printStackTrace() ;
        } finally {
            //释放接口服务连接资源
            client.destroyResources() ;
        }
    }
}
